import userApi from '@/api/usersApi';
import { useUserStore } from '@/store';
import { IMenu, IUser } from '@/types/api';
import { getMenuPath } from '@/utils/index';

export interface IAuthLoader {
    buttonList: string[];
    menuList: IMenu.MenuItem[];
    menuPathList: string[];
    userInfo: IUser.UserItem;
}

/**加载页面前，先执行Loader，获取权限列表，再根据权限列表动态生成左侧菜单。
 * 1.调用权限列表接口
 * 2.递归生成页面路径（后续页面权限判断使用）
 * 3.返回菜单列表、按钮列表和页面路径
 * @returns
 */
export default async function AuthLoader(): Promise<IAuthLoader> {
    // TODO:try catch 捕获异常，并提示用户 并且优化白屏时间
    const [permissionRes, userInfoRes] = await Promise.all([
        await userApi.getPermissionList(),
        await userApi.getUserInfo()
    ]);
    const { buttonList, menuList } = permissionRes.data;
    const userInfo = userInfoRes.data;
    const menuPathList = getMenuPath(menuList);

    // 把数据存入 Zustand
    useUserStore.getState().updateUserInfo(userInfo);

    // 仍然返回数据，方便组件 `useLoaderData` 访问
    return {
        buttonList,
        menuList,
        menuPathList,
        userInfo
    };
}
